module.exports = (rules) => {
// 首先区分指向地址static 、重定向redirect
    return async (ctx, next) => {
        //因为配置文件是一个多对象（一个规则为一个对象）数组，所以遍历规则，下面拿规则匹配url
        for (let i = 0; i < rules.length; i++) {
            let rule = rules[i];
            // url设置多规则重写不同地址，类似router（但它不能一个router多个跳转规则，且不能加判断）
            if (rule.regex) {   //配置config文件设置：有正则属性对付需要正则的，用它的属性看看能不能正则到
                let result = rule.regex.exec(ctx.url);  //如果有正则属性则正则exec匹配url
                if (result) {  // 如果用正则属性匹配出结果集，则下面用正则规则重写
                    if (!rule.dist) { //如正则出结果，且dist属性为null，则用public后面地址拼接重写，即是public替换为空
                        ctx.url = result[1]; // result[0]是第一个结果，也就/\/public(.*)/匹配全部，[1]是第二个(.*)结果
                    } else {
                        ctx.url = rule.dist;  //否则正则出结果，且dist属性不为null，则需用dist重写
                    }
                }
            }
            if (rule.src === ctx.url) {  //没正则属性的则有 准确路径src属性判断url，如果是它则用它的dist重写
                ctx.url = rule.dist;
            }
        }
        await next();//都不是则不重写url，放行
    }
}